package com.ruoyi.produce.material.mapper;


import com.ruoyi.produce.material.domain.ProduceMaterialRequisition;
import com.ruoyi.produce.material.domain.ProduceMaterialRequisitionList;
import com.ruoyi.psi.base.product.domain.ProduceCheck;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 物料领、补、退信息
 * 数据层
 * @author Drj 2021/6/28
 */
public interface ProduceMaterialMapper {
    /**
     * 物料领、补、退信息查询
     * @param produceMaterialRequisition
     * @return
     */
    public List<ProduceMaterialRequisition> selectProduceMaterialRequisitionList(ProduceMaterialRequisition produceMaterialRequisition);

    /**
     * 按编号查询
     * @param materialRequisitionId 物料领、补、退信息编号
     * @return
     */
    public ProduceMaterialRequisition selectProduceMaterialRequisitionById(String materialRequisitionId);

    /**
     * 获取最新的一条物料领、补、退编号
     * @return
     */
    public String getMaterialRequisitionId(String materialRequisitionType);

    /**
     * 物料领、补、退信息新增
     * @param produceMaterialRequisition
     * @return
     */
    public int insertProduceMaterialRequisition(ProduceMaterialRequisition produceMaterialRequisition);

    /**
     * 物料领、补、退信息更新
     * @param produceMaterialRequisition
     * @return
     */
    public int updateProduceMaterialRequisition(ProduceMaterialRequisition produceMaterialRequisition);

    /**
     * 更新物料领、补、退信息删除标志位
     * @param produceMaterialRequisition
     * @return
     */
    public int updateProduceMaterialRequisitionDeleteFlag(ProduceMaterialRequisition produceMaterialRequisition);

    /**
     * 更新审批状态
     * @param materialRequisitionId
     * @return
     */
    int completeApprovalFlag(String materialRequisitionId);

    /**
     * 拒绝审批状态
     * @param materialRequisitionId
     * @return
     */
    int refuseApprovalFlag(String materialRequisitionId);

    /**
     * 物料领、补、退信息详细查询
     * @param produceMaterialRequisitionList
     * @return
     */
    public List<ProduceMaterialRequisitionList> selectProduceMaterialRequisitionListList(ProduceMaterialRequisitionList produceMaterialRequisitionList);

    /**
     * 查询物料领、补、退信息对应的所有产品详细
     * @param materialRequisitionId 物料领、补、退信息编号
     * @return
     */
    public List<ProduceMaterialRequisitionList> selectProduceMaterialRequisitionListListById(String materialRequisitionId);

    /**
     * 查询物料领、补、退信息对应的指定产品详细
     * @param materialRequisitionId 物料领、补、退信息编号
     * @return
     */
    public ProduceMaterialRequisitionList  selectProduceMaterialRequisitionListById(@Param("materialRequisitionId")String materialRequisitionId, @Param("produceId")String produceId);

    /**
     * 物料领、补、退信息详细新增
     * @param produceMaterialRequisitionList 物料领、补、退信息详细
     * @return
     */
    public int insertProduceMaterialRequisitionList(ProduceMaterialRequisitionList produceMaterialRequisitionList);

    /**
     * 物料领、补、退信息详细更新
     * @param produceMaterialRequisitionList 物料领、补、退信息详细
     * @return
     */
    public int updateProduceMaterialRequisitionList(ProduceMaterialRequisitionList produceMaterialRequisitionList);

    /**
     * 删除物料领、补、退信息详细
     * @param materialRequisitionId  物料领、补、退信息编号
     * @param produceId 产品编号
     * @return
     */
    public int deleteProduceMaterialRequisitionListById(@Param("materialRequisitionId")String materialRequisitionId, @Param("produceId")String produceId);

    /**
     * 获取指定产品领/补/退料出库数量
     * @param produceCheck
     * @return
     */
    public  Double getMaterialRequisitionProduceNum(ProduceCheck produceCheck);

    /**
     * 获取加工单对应物料信息
     * @param workSheetId 加工单号
     * @return
     */
    public List<ProduceMaterialRequisitionList> getMaterialRequisitionFromWorkSheet(String workSheetId);

    /**
     * 已领取数量
     * @param workSheetId 加工单号
     * @param produceId 产品编号
     * @return
     */
    public Double getReceivedNum(@Param("workSheetId")String workSheetId, @Param("produceId")String produceId);

    /**
     * 退回数量
     * @param workSheetId 加工单号
     * @param produceId 产品编号
     * @return
     */
    public Double getReturnedNum(@Param("workSheetId")String workSheetId, @Param("produceId")String produceId);
}
